package cn.com.anypay.manager.common.utils;

import cn.com.anypay.manager.common.constants.CommonConstants;

import java.util.regex.Pattern;

/**
 * 字符串工具类
 * 提供字符串处理的工具方法
 */
public final class StringUtils {

    // 防止实例化
    private StringUtils() {}

    /**
     * 判断字符串是否为空或空白
     */
    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }

    /**
     * 判断字符串是否不为空且不为空白
     */
    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    /**
     * 安全的字符串比较
     */
    public static boolean equals(String str1, String str2) {
        if (str1 == null && str2 == null) {
            return true;
        }
        if (str1 == null || str2 == null) {
            return false;
        }
        return str1.equals(str2);
    }

    /**
     * 验证手机号格式
     */
    public static boolean isValidMobile(String mobile) {
        if (isBlank(mobile)) {
            return false;
        }
        return Pattern.matches(CommonConstants.REGEX_MOBILE, mobile);
    }

    /**
     * 验证邮箱格式
     */
    public static boolean isValidEmail(String email) {
        if (isBlank(email)) {
            return false;
        }
        return Pattern.matches(CommonConstants.REGEX_EMAIL, email);
    }

    /**
     * 脱敏手机号 (保留前3位和后4位)
     */
    public static String maskMobile(String mobile) {
        if (isBlank(mobile) || mobile.length() != 11) {
            return mobile;
        }
        return mobile.substring(0, 3) + "****" + mobile.substring(7);
    }

    /**
     * 脱敏邮箱 (保留@前的前2位和@后的内容)
     */
    public static String maskEmail(String email) {
        if (isBlank(email) || !email.contains("@")) {
            return email;
        }
        String[] parts = email.split("@");
        if (parts[0].length() <= 2) {
            return email;
        }
        return parts[0].substring(0, 2) + "***@" + parts[1];
    }

    /**
     * 驼峰转下划线
     */
    public static String camelToUnderscore(String camelCase) {
        if (isBlank(camelCase)) {
            return camelCase;
        }
        return camelCase.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
    }

    /**
     * 下划线转驼峰
     */
    public static String underscoreToCamel(String underscore) {
        if (isBlank(underscore)) {
            return underscore;
        }
        String[] parts = underscore.split("_");
        StringBuilder result = new StringBuilder(parts[0]);
        for (int i = 1; i < parts.length; i++) {
            if (parts[i].length() > 0) {
                result.append(parts[i].substring(0, 1).toUpperCase())
                      .append(parts[i].substring(1));
            }
        }
        return result.toString();
    }
}